/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Sort;

import java.util.Comparator;

/**
 *
 * @author pol
 */
public class InsertionSort {

    /**
     * Сортировка вставками
     * @param obj сортируемый массив
     * @param cmp компаратор, по которому происходит сравнение объектов
     */
    public static void sort(Object[] obj, Comparator cmp) {
        for (int j = 1; j < obj.length; j++) {
            Object tmp = obj[j];
            int i = j - 1;
            while (i > 0 && cmp.compare(obj[i], tmp) > 0) {
                swap(obj, i + 1, i);
                i--;
            }
            obj[i + 1] = tmp;
        }
    }

    /**
     * Меняет два элемента в массиве местами
     * @param x массив
     * @param a индекс первого элемента
     * @param b индекс второго элемента
     */
    private static void swap(Object[] x, int a, int b) {
        Object t = x[a];
        x[a] = x[b];
        x[b] = t;
    }
}
